package pfc.dados.controlador;


import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.classic.Session;
import org.hibernate.criterion.Order;

import pfc.dados.modelo.NivelGuardado;
import pfc.dados.util.HibernateUtil;


public class NivelGuardadoManager extends HibernateUtil {
	
	/*
	* Funcion para traerse el nivel concreto que se vaya a jugar a partir de su id de la partida
	*/
	public NivelGuardado get(Long id) {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		NivelGuardado resultado = new NivelGuardado();
		try {
			Query query = session.createQuery("from NivelGuardado where id = :id");
	        query.setLong("id", id);
	        resultado = (NivelGuardado) query.uniqueResult();			
		} 
		catch (HibernateException e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}
		
		session.getTransaction().commit();
		return resultado;
	}

	/*
	* Funcion para guardar el nivel por el que el usuario va en ese momento
	*/
	public void guardaNivel(NivelGuardado nivel) {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		try {
			session.save(nivel);
		} 
		catch (HibernateException e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}
		
		session.getTransaction().commit();
	}
	
	/*
	 * Funcion que lista todas las partidas guardadas actualmente
	 */
	
	public List<NivelGuardado> list() {
		
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		List<NivelGuardado> partidas = null;
		try {
			Criteria criteria = session.createCriteria(NivelGuardado.class);
	        criteria.addOrder(Order.desc("id"));
	        partidas = (List<NivelGuardado>)session.createQuery("from NivelGuardado ng order by ng.id desc").list();
			
		} catch (HibernateException e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}
		session.getTransaction().commit();
		return partidas;
	}
	
}
